/*
 * PhysicObject.h
 *
 *  Created on: 03.10.2012
 *      Author: Caffeine
 */

#ifndef __PHYSICOBJECT_H__
#define __PHYSICOBJECT_H__
#include <irrTypes.h>
#include <IReferenceCounted.h>

#include <ISerializationObject.h>

namespace irr{
namespace object{

/***
 * @class PhysicObject
 * Реализует часть физических свойств объекта, а именно влючение, выключение
 * физики, а так же прижок.
 *
 * Необходимо заминить методы on_setPhysic и on_jump. Внтури указанных методов
 * не нужно выполнять проверок на то включина ли физика. По умолчанию физика
 * выключина. При уничтожении физика будет отключена.
 *
 * Повторный вызов выключения (или включения) никчиму не привидёт
 */

class PhysicObject:public virtual ISerializationObject{
private:
	bool PhysicEnabled;
protected:
	virtual bool on_setPhysic(bool value)=0;
	virtual void on_jump(irr::f32 value)=0;
	virtual irr::core::stringc getSerializationNodeName();
public:

	PhysicObject();
	virtual ~PhysicObject();

	/***
	 * Устанавливает включить ли физику
	 *
	 * @param value если TRUE, то физика включина, иначе FALSE
	 */
	virtual void setPhysicEnabled(bool value);

	/***
	 * Возвращяет включина ли физика
	 *
	 * @return TRUE если физика включина, иначе FALSE
	 */
	virtual bool isPhysicEnabled();

	/***
	 * Прыжок
	 *
	 * @param force сила прыжка
	 */
	virtual void jump(irr::f32 force);
	
	virtual void getSerialized(irr::xml::IXmlNode*node);
	virtual irr::xml::TagResult setSerialized(irr::xml::IXmlNode*node);
};

}//namespace object
}//namespace irr

#endif /* PHYSICOBJECT_H_ */
